今天要實現用腳本(script)改變文字(Text),寫一個蘋果記分板。
主要是偵測碰撞事件,再因碰撞改變其他腳本變數。(利用全域變數static)
其他腳本負責記錄分數與顯示分數。
所以今天要寫兩個腳本:
一、記錄與顯示分數
二、碰撞事件
首先,創一個Text(右鍵→UI→Text)物件,負責顯示分數,和掛載分數紀錄腳本。
接著就來寫紀錄分數腳本吧!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //Text相關的函數都存在UI的命名空間內,所以要添加這個
public class ScoreBoard : MonoBehaviour
{
//變數宣告
public static int score; //設定成 public(外部可取) static(全域)
//因為數量是自然數,所以使用int
public Text ShowScore; //建立Text(變數的概念),從遊戲引擎拖曳text物件
//初始化
void Start() {
score=0; //一開始為0
}
//不斷更新分數
void Update() {
show();
}
private void show(){
ShowScore.text="apple:"+score.ToString();
// ShowScore抓到的text物件.的text文字 = " ";
// .ToString()可將int轉為string
}
}
寫好之後,將腳本掛載到Text之下,或是Text的父物件。(其實掛在哪都沒差,不影響取值和顯示)
並且把Text物件拖曳至腳本中。
碰撞事件(偵測碰撞)要成立有幾個條件:
1.碰撞的物體(雙方)都要掛載 形狀collider 2D
2.主動碰撞的一方要掛載Rigidbody 2D
3.碰撞腳本要掛載在主動碰撞方
要碰撞的物體是小紅帽(role)和她要撿的蘋果(apple)
主要碰撞方是小紅帽,蘋果是被撞的一方;所以腳本會掛在小紅帽身上
然後替蘋果(apple)用tag標記,tag名字可以自訂。
接著就來寫紀錄分數腳本吧!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AppleCollision : MonoBehaviour
{
//初始化
void Start() {
//建立碰撞器(變數的概念)
BoxCollider2D bx;
//將這個腳本的物體碰撞器設給變數
bx = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D;
}
//碰撞事件,只要this產生碰撞,就會引起這個事件
void OnCollisionEnter2D(Collision2D coll) //傳入碰撞對象,取名coll(可自訂)
{
//觸發條件
if (coll.gameObject.tag == "apple") //如果碰撞對象.的物件.的tag是apple
{
Destroy(coll.gameObject); //碰壞此物件
ScoreBoard.score++; //ScoreBoard這個class.的score全域變數
Debug.Log(ScoreBoard.score);//檢查變數有沒有加成功
}
}
}
主要碰撞方是小紅帽,所以腳本掛在小紅帽身上
按下開始,右上角蘋果數量初始化為0
1操控小紅帽去碰撞蘋果,蘋果消失,右上角蘋果數量初始化為1
主控台顯示蘋果數量為1